package br.ufmt.model;

import java.util.Date;

/**
 * Para cada m�dia locada deve ser criado um Item de loca��o, que armazenar� uma s�rie
 * de informa��es relativas a m�dia locada.
 * @author jppreti
 *
 */
public class LocacaoItem {

	/**
	 * Data em que a m�dia locada deve ser devolvida
	 */
	private Date dataDevolucao;
	/**
	 * Data em que ocorreu a devolu��o
	 */
	private Date dataDevolvida;
	/**
	 * A m�dia que foi locada
	 */
	private Midia midiaLocada;
	/**
	 * O valor da loca��o relativo a essa m�dia
	 */
	private float valorLocacao;
	/**
	 * O valor da multa em caso de atraso
	 */
	private float multa;
	
	public LocacaoItem(Midia midia, Date dataDevolucao, float valorLocacao) {
		setDataDevolucao(dataDevolucao);
		setMidiaLocada(midia);
		setValorLocacao(valorLocacao);
	}

	public Date getDataDevolucao() {
		return dataDevolucao;
	}

	public Date getDataDevolvida() {
		return dataDevolvida;
	}

	public Midia getMidiaLocada() {
		return midiaLocada;
	}

	public float getValorLocacao() {
		return valorLocacao;
	}

	public float getMulta() {
		return multa;
	}

	public void setDataDevolucao(Date dataDevolucao) {
		this.dataDevolucao = dataDevolucao;
	}

	/**
	 * Registra a data em que a m�dia foi devolvida, atualizando o valor da multa se necess�rio
	 * @param dataDevolvida
	 */
	public void setDataDevolvida(Date dataDevolvida) {
		this.dataDevolvida = dataDevolvida;
		long diferenca = getDataDevolvida().getTime() - getDataDevolucao().getTime();
		//diferen�a em horas
		diferenca = diferenca/1000/60/60;
		if (diferenca>=2) {
			float indice = diferenca/getMidiaLocada().getObra().getRotulo().getTempoDevolucao(); 
			setMulta(indice*TabelaPreco.getValorLocacao(getMidiaLocada()));
		}		
	}

	public void setMidiaLocada(Midia midiaLocada) {
		this.midiaLocada = midiaLocada;
	}

	public void setValorLocacao(float valorLocacao) {
		this.valorLocacao = valorLocacao;
	}

	public void setMulta(float multa) {
		this.multa = multa;
	}
	
	/**
	 * 
	 * @return Retorna o valor total de um determinado item da loca��o.
	 */
	public float getValorTotal() {
		return getValorLocacao() + getMulta();
	}
	
	/**
	 * 
	 * @return true se o item locado j� foi devolvido e false caso contr�rio
	 */
	public boolean isDevolvido() {
		return getDataDevolvida()!=null;
	}
}
